package com.zenithmind.mall.service;

import com.zenithmind.common.result.PageResult;
import com.zenithmind.mall.pojo.dto.SubsidyActivityDTO;
import com.zenithmind.mall.pojo.query.SubsidyActivityQuery;
import com.zenithmind.mall.pojo.vo.SubsidyActivityVO;

import java.math.BigDecimal;
import java.util.List;

/**
 * 百亿补贴活动服务接口 - 遵循接口隔离原则，专门负责补贴活动管理
 * 
 * @author ZenithMind Team
 * @since 2025-07-03
 */
public interface SubsidyActivityService {

    /**
     * 分页查询补贴活动
     * 
     * @param query 查询条件
     * @return 分页结果
     */
    PageResult<SubsidyActivityVO> getActivityPage(SubsidyActivityQuery query);

    /**
     * 根据ID获取补贴活动详情
     * 
     * @param id 活动ID
     * @return 活动详情
     */
    SubsidyActivityVO getActivityById(String id);

    /**
     * 创建补贴活动
     * 
     * @param activityDTO 活动信息
     * @return 活动ID
     */
    String createActivity(SubsidyActivityDTO activityDTO);

    /**
     * 更新补贴活动
     * 
     * @param id 活动ID
     * @param activityDTO 活动信息
     * @return 是否成功
     */
    Boolean updateActivity(String id, SubsidyActivityDTO activityDTO);

    /**
     * 删除补贴活动
     * 
     * @param id 活动ID
     * @return 是否成功
     */
    Boolean deleteActivity(String id);

    /**
     * 启动补贴活动
     * 
     * @param id 活动ID
     * @return 是否成功
     */
    Boolean startActivity(String id);

    /**
     * 结束补贴活动
     * 
     * @param id 活动ID
     * @return 是否成功
     */
    Boolean endActivity(String id);

    /**
     * 暂停补贴活动
     * 
     * @param id 活动ID
     * @return 是否成功
     */
    Boolean pauseActivity(String id);

    /**
     * 恢复补贴活动
     * 
     * @param id 活动ID
     * @return 是否成功
     */
    Boolean resumeActivity(String id);

    /**
     * 启用/禁用补贴活动
     * 
     * @param id 活动ID
     * @param enabled 是否启用
     * @return 是否成功
     */
    Boolean updateActivityStatus(String id, Boolean enabled);

    /**
     * 获取当前进行中的活动
     * 
     * @return 进行中的活动列表
     */
    List<SubsidyActivityVO> getCurrentActivities();

    /**
     * 获取用户可参与的活动
     * 
     * @param userId 用户ID
     * @return 可参与的活动列表
     */
    List<SubsidyActivityVO> getUserAvailableActivities(String userId);

    /**
     * 检查用户是否可以参与活动
     * 
     * @param id 活动ID
     * @param userId 用户ID
     * @return 是否可以参与
     */
    Boolean canUserParticipate(String id, String userId);

    /**
     * 检查活动是否可以参与
     * 
     * @param id 活动ID
     * @return 是否可以参与
     */
    Boolean canParticipate(String id);

    /**
     * 使用活动预算
     * 
     * @param id 活动ID
     * @param amount 使用金额
     * @return 是否成功
     */
    Boolean useBudget(String id, BigDecimal amount);

    /**
     * 退还活动预算
     * 
     * @param id 活动ID
     * @param amount 退还金额
     * @return 是否成功
     */
    Boolean returnBudget(String id, BigDecimal amount);

    /**
     * 获取活动剩余预算
     * 
     * @param id 活动ID
     * @return 剩余预算
     */
    BigDecimal getRemainingBudget(String id);

    /**
     * 获取活动统计信息
     * 
     * @param id 活动ID
     * @return 统计信息
     */
    Object getActivityStatistics(String id);

    /**
     * 批量处理活动状态
     * 
     * @return 处理数量
     */
    Integer batchUpdateActivityStatus();

    /**
     * 预热活动（提前加载到缓存）
     * 
     * @param id 活动ID
     * @return 是否成功
     */
    Boolean warmUpActivity(String id);
}
